package Test1;

// 目前有100名囚犯，每个囚犯的编号是1-200之间的随机数。
// 现在要求依次随机生成100名囚犯的编号（要求这些囚犯的编号是不能重复的），
// 然后让他们依次站成一排。(注：位置是从1开始计数的)，接下来，国王命令手下先干掉全部奇数位置处的人。
// 剩下的人，又从新按位置1开始，再次干掉全部奇数位置处的人，依此类推，直到最后剩下一个人为止，剩下的这个人为幸存者。
//        **具体功能点的要求如下：**
// 请输出幸存者的编号，以及他第一次所占的位置值是多少。

import java.util.List;
import java.util.ArrayList;
import java.util.Random;

public class Code1 {
    public static List<People> peoples = new ArrayList<>();
    public static Random r = new Random();
    public static void main(String[] args){
        for(int i = 1; i <= 100; i++){
            while(true){
                int code = r.nextInt(200) + 1;
                if(isCanUse(code)){
                    People p = new People(code,i);
                    peoples.add(p);
                    break;
                }
            }
        }
        System.out.println("囚犯占位：" + peoples);

        while(peoples.size() > 1){
            List<People> tempPeoples = new ArrayList<>();
            for(int i = 1; i < peoples.size(); i += 2){
                tempPeoples.add(peoples.get(i));
            }
            peoples = tempPeoples;
            // System.out.println("当前囚犯占位：" + peoples);
        }
        People luckyPeople = peoples.get(0);
        System.out.println("幸存者的编号：" + luckyPeople.getCode() + "，最开始的位置：" + luckyPeople.getLocation());
    }

    public static boolean isCanUse(int code){
        for(People people : peoples){
            if(people.getCode() == code){
                return false;
            }
        }
        return true;
    }
}